from reinvent.datapipeline.filters.regex import SMILES_TOKENS_REGEX

KNOWN = [
    (
        "Cc1cccc(C2Sc3ccccc3NC3=C2C(=O)c2ccccc23)c1F",
        [
            "C",
            "c",
            "1",
            "c",
            "c",
            "c",
            "c",
            "(",
            "C",
            "2",
            "S",
            "c",
            "3",
            "c",
            "c",
            "c",
            "c",
            "c",
            "3",
            "N",
            "C",
            "3",
            "=",
            "C",
            "2",
            "C",
            "(",
            "=",
            "O",
            ")",
            "c",
            "2",
            "c",
            "c",
            "c",
            "c",
            "c",
            "2",
            "3",
            ")",
            "c",
            "1",
            "F",
        ],
    ),
    (
        "COc1ccc(-c2ncn(C)c2-c2cc(I)c(OC)c(OC)c2)cc1F",
        [
            "C",
            "O",
            "c",
            "1",
            "c",
            "c",
            "c",
            "(",
            "-",
            "c",
            "2",
            "n",
            "c",
            "n",
            "(",
            "C",
            ")",
            "c",
            "2",
            "-",
            "c",
            "2",
            "c",
            "c",
            "(",
            "I",
            ")",
            "c",
            "(",
            "O",
            "C",
            ")",
            "c",
            "(",
            "O",
            "C",
            ")",
            "c",
            "2",
            ")",
            "c",
            "c",
            "1",
            "F",
        ],
    ),
    (
        "C/C(=C\\Cn1c[n+](C)c2ncnc(N)c21)CC[C@]1(C)C2=CCC[C@@H](C)[C@]2(C)CC[C@H]1C.[Cl-]",
        [
            "C",
            "/",
            "C",
            "(",
            "=",
            "C",
            "\\",
            "C",
            "n",
            "1",
            "c",
            "[n+]",
            "(",
            "C",
            ")",
            "c",
            "2",
            "n",
            "c",
            "n",
            "c",
            "(",
            "N",
            ")",
            "c",
            "2",
            "1",
            ")",
            "C",
            "C",
            "[C@]",
            "1",
            "(",
            "C",
            ")",
            "C",
            "2",
            "=",
            "C",
            "C",
            "C",
            "[C@@H]",
            "(",
            "C",
            ")",
            "[C@]",
            "2",
            "(",
            "C",
            ")",
            "C",
            "C",
            "[C@H]",
            "1",
            "C",
            ".",
            "[Cl-]",
        ],
    ),
    (
        "CC(=O)C1(C(=O)Nc2ccccc2)C(Cl)C(=O)N1N(c1c(O)ccc2c(P(Cl)Cl)pc(C(=O)O)n12)[N+](=O)[O-]",
        [
            "C",
            "C",
            "(",
            "=",
            "O",
            ")",
            "C",
            "1",
            "(",
            "C",
            "(",
            "=",
            "O",
            ")",
            "N",
            "c",
            "2",
            "c",
            "c",
            "c",
            "c",
            "c",
            "2",
            ")",
            "C",
            "(",
            "Cl",
            ")",
            "C",
            "(",
            "=",
            "O",
            ")",
            "N",
            "1",
            "N",
            "(",
            "c",
            "1",
            "c",
            "(",
            "O",
            ")",
            "c",
            "c",
            "c",
            "2",
            "c",
            "(",
            "P",
            "(",
            "Cl",
            ")",
            "Cl",
            ")",
            "p",
            "c",
            "(",
            "C",
            "(",
            "=",
            "O",
            ")",
            "O",
            ")",
            "n",
            "1",
            "2",
            ")",
            "[N+]",
            "(",
            "=",
            "O",
            ")",
            "[O-]",
        ],
    ),
    (
        "N#Cc1nnn2c1nc(N)c1c(Cl)cccc12",
        [
            "N",
            "#",
            "C",
            "c",
            "1",
            "n",
            "n",
            "n",
            "2",
            "c",
            "1",
            "n",
            "c",
            "(",
            "N",
            ")",
            "c",
            "1",
            "c",
            "(",
            "Cl",
            ")",
            "c",
            "c",
            "c",
            "c",
            "1",
            "2",
        ],
    ),
    (
        "COCCOCCOCCOC(=O)C1(C(=O)OCCOCCOCCOC)C23C4=c5c6c7c8c9c%10c%11c%12c%13c9c9c%14c%15c%16c%17c%18c%19c%20c%21c%22c%23c%24c(c-%11c(c2c%24c2c%11c%24c%25c(c5c5c6c(c8%14)c%15c6c%17c(c%25c56)c5c%18c%21c(c%232)c%245)C%1113)C4C%107)C%12C%22C%201CN(CCOCCOCCN)CC%131C9C%19%16",
        [
            "C",
            "O",
            "C",
            "C",
            "O",
            "C",
            "C",
            "O",
            "C",
            "C",
            "O",
            "C",
            "(",
            "=",
            "O",
            ")",
            "C",
            "1",
            "(",
            "C",
            "(",
            "=",
            "O",
            ")",
            "O",
            "C",
            "C",
            "O",
            "C",
            "C",
            "O",
            "C",
            "C",
            "O",
            "C",
            ")",
            "C",
            "2",
            "3",
            "C",
            "4",
            "=",
            "c",
            "5",
            "c",
            "6",
            "c",
            "7",
            "c",
            "8",
            "c",
            "9",
            "c",
            "%10",
            "c",
            "%11",
            "c",
            "%12",
            "c",
            "%13",
            "c",
            "9",
            "c",
            "9",
            "c",
            "%14",
            "c",
            "%15",
            "c",
            "%16",
            "c",
            "%17",
            "c",
            "%18",
            "c",
            "%19",
            "c",
            "%20",
            "c",
            "%21",
            "c",
            "%22",
            "c",
            "%23",
            "c",
            "%24",
            "c",
            "(",
            "c",
            "-",
            "%11",
            "c",
            "(",
            "c",
            "2",
            "c",
            "%24",
            "c",
            "2",
            "c",
            "%11",
            "c",
            "%24",
            "c",
            "%25",
            "c",
            "(",
            "c",
            "5",
            "c",
            "5",
            "c",
            "6",
            "c",
            "(",
            "c",
            "8",
            "%14",
            ")",
            "c",
            "%15",
            "c",
            "6",
            "c",
            "%17",
            "c",
            "(",
            "c",
            "%25",
            "c",
            "5",
            "6",
            ")",
            "c",
            "5",
            "c",
            "%18",
            "c",
            "%21",
            "c",
            "(",
            "c",
            "%23",
            "2",
            ")",
            "c",
            "%24",
            "5",
            ")",
            "C",
            "%11",
            "1",
            "3",
            ")",
            "C",
            "4",
            "C",
            "%10",
            "7",
            ")",
            "C",
            "%12",
            "C",
            "%22",
            "C",
            "%20",
            "1",
            "C",
            "N",
            "(",
            "C",
            "C",
            "O",
            "C",
            "C",
            "O",
            "C",
            "C",
            "N",
            ")",
            "C",
            "C",
            "%13",
            "1",
            "C",
            "9",
            "C",
            "%19",
            "%16",
        ],
    ),
]


def test_unwanted_tokens():
    for smiles, tokens in KNOWN:
        tokenized = SMILES_TOKENS_REGEX.findall(smiles)
        assert tokenized == tokens
